﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ForrajeriaDB;

namespace ForrajeriaDAL
{
    [Serializable]
    public class GenericDAL :AccesoDAL
    {
        private SqlCommand cmd;

        #region Singleton
        private static GenericDAL instanceGeneric;

        private GenericDAL()
            : base()
        {

        }

        public static GenericDAL getInstance
        {
            get 
            {
                if (instanceGeneric == null)
                {
                    instanceGeneric = new GenericDAL();
                }
                return instanceGeneric;
            }
        }
        #endregion 

        public List<GenericMO> GetAllClientes()
        {
            SqlDataReader reader = null;
            List<GenericMO> lista = new List<GenericMO>();

            try
            {
                cmd = new SqlCommand("GenericClientes", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;
                opencon();
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    GenericMO aux = new GenericMO();
                    aux.Key1 = int.Parse(reader["CodigoCliente"].ToString());
                    aux.Texto1 = reader["CodigoCliente"].ToString();
                    aux.Texto2 = reader["NombreCliente"].ToString();
                    aux.Texto3 = reader["ApellidoCliente"].ToString();
                    aux.Texto4 = reader["TipoDocumento"].ToString();
                    aux.Texto5 = reader["NroDocumento"].ToString();
                    aux.Texto6 = reader["EstadoCliente"].ToString();
                    aux.Texto7 = reader["Telefono"].ToString();
                    aux.Texto8 = reader["Localidad"].ToString();
                    aux.Texto9 = reader["Provincia"].ToString();

                    lista.Add(aux);
                    aux = null;
                }
                return lista;

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                reader.Close();
                closecon();
            }
        }

        public List<GenericMO> GetAllForrajes()
        {
            SqlDataReader reader = null;
            List<GenericMO> lista = new List<GenericMO>();
            try
            {

                cmd = new SqlCommand("GenericForraje", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;
                opencon();
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    GenericMO aux = new GenericMO();
                    aux.Key1 = int.Parse(reader["CodigoForraje"].ToString());
                    aux.Texto1 = reader["CodigoForraje"].ToString();
                    aux.Texto2 = reader["NombreForraje"].ToString();
                    aux.Texto3 = reader["StockActual"].ToString();
                    aux.Texto4 = reader["DescripcionForraje"].ToString();
                    aux.Texto5 = reader["Peso"].ToString();
                    aux.Texto6 = reader["Estado"].ToString();
                    aux.Texto7 = reader["PrecioXKilo"].ToString();
                    aux.Texto8 = reader["Edad"].ToString();
                    aux.Texto9 = reader["Marca"].ToString();
                    aux.Texto10 = reader["DescripcionMarca"].ToString();

                    lista.Add(aux);
                    aux = null;
                }
                return lista;
            }

            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                reader.Close();
                closecon();

            }
        }

        public List<GenericMO> GetDetallesPedidosByID(int idPedido)
        {
            SqlDataReader rea = null;
            List<GenericMO> lista = new List<GenericMO>();
            try
            {
                cmd = new SqlCommand("GenericDetallePedidoCliente", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@IDPEDIDO", SqlDbType.Int).Value = idPedido;
                opencon();
                rea = cmd.ExecuteReader();

                while (rea.Read())
                {
                    GenericMO aux = new GenericMO();
                    aux.Key1 = int.Parse(rea["nroDetalle"].ToString());
                    aux.Key2 = int.Parse(rea["codigo_forraje"].ToString());
                    aux.Texto1 = rea["descripcion"].ToString();
                    aux.Texto2 = rea["cantidad"].ToString();
                    aux.Texto3 = rea["precio"].ToString();
                    aux.Texto4 = (double.Parse(rea["cantidad"].ToString())* double.Parse(rea["precio"].ToString())).ToString();

                    lista.Add(aux);
                    aux = null;                    

                }
                return lista;
            }
            catch(Exception ex)
            {
                throw ex;
            }
            finally
            {
                rea.Close();
                closecon();
            }
        }

    }
}
